diff --git a/README.SRC b/README.SRC index 72346021..ec19afce 100644 --- a/README.SRC +++ b/README.SRC @@ -87,7 +87,6 @@ Developer quick start # # apt-get update # # apt-get install zlib1g-dev:i386 libc6-dev:i386 # # apt-get install crossbuild-essential-riscv64 # for example - # aarch64-linux-gnu/4.9.2/cc1 needs libmpfr.so.4. Make a symlink: # # ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4 diff --git a/src/stub/Makefile b/src/stub/Makefile index 6348c241..a50a6e4a 100644 --- a/src/stub/Makefile +++ b/src/stub/Makefile @@ -2234,24 +2234,30 @@ riscv64-linux.elf-fold.h : $(srcdir)/src/$$T.lds \ $(call tc,bin2h) tmp/$T.bin $@ tmp/riscv64-linux.elf-fold.o : $(srcdir)/src/$$T.S - $(call tc,gcc) -c $< -o $@ + $(call tc,gcc) -c -O $< -o $@ $(call tc,f-objstrip,$@) tmp/riscv64-linux.elf-main2.o : $(srcdir)/src/$$T.c $(srcdir)/src/i386-linux.elf-main2.c - $(call tc,gcc) -c $< -o $@ + (echo '#define call jal'; $(call tc,gcc) -S $< -o -) \ + | sed 's/@plt//' \ + | $(call tc,gcc) -c -x assembler-with-cpp - -o $@ + $(call tc,gpp_mkdep) --mode=c --MMD=$@ --MF=tmp/$T.d $< $(call tc,f-objstrip,$@) tmp/riscv64-linux.elf-help_umf.o: $(srcdir)/src/$$T.S $(call tc,gcc) -c $< -o $@ tmp/riscv64-linux.elf-upxfd_linux.o : $(srcdir)/src/upxfd_linux.c - $(call tc,gcc) -c $< -o $@ + (echo '#define call jal'; $(call tc,gcc) -S -O $< -o -) \ + | sed 's/@plt//' \ + | $(call tc,gcc) -c -x assembler-with-cpp - -o $@ $(call tc,objcopy) --strip-unneeded --rename-section .text=UMF_LINUX \ -R .riscv.attributes -R .data -R .bss -R .note.GNU-stack $@ $(call tc,objdump) -Dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm tmp/riscv64-expand.o: $(srcdir)/src/$$T.S $(call tc,gcc) -c $< -o $@ + $(call tc,objcopy) -R .riscv.attributes $@ # ===== # /*********************************************************************** diff --git a/src/stub/src/arch/i086/cleanasm.py b/src/stub/src/arch/i086/cleanasm.py index 73b42cb3..bfb11261 100644 --- a/src/stub/src/arch/i086/cleanasm.py +++ b/src/stub/src/arch/i086/cleanasm.py @@ -99,11 +99,11 @@ def main(argv): k, v = m.group(1).strip(), [0, 0, None, 0] assert k and v, (inst, args) v[2] = k # new name - if k in labels: + if labels.has_key(k): assert labels[k][:2] == v[:2] return k, v def add_label(k, v): - if k in labels: + if labels.has_key(k): assert labels[k][:2] == v[:2] else: labels[k] = v @@ -449,7 +449,7 @@ def main(argv): ofp = open(ofile, "wb") current_label = None for label, inst, args, args_label in olines: - if label in labels: + if labels.has_key(label): current_label = labels[label][2] if opts.verbose: ofp.write("%s: /* %d */\n" % (labels[label][2], labels[label][3])) diff --git a/src/stub/src/upxfd_linux.c b/src/stub/src/upxfd_linux.c index e31bd235..b87255a4 100644 --- a/src/stub/src/upxfd_linux.c +++ b/src/stub/src/upxfd_linux.c @@ -78,7 +78,7 @@ extern void my_bkpt(void const *, ...); #define ANDROID_FRIEND 0 #define addr_string(string) ({ \ char const *str; \ - asm("jal 0f; .string \"" string "\"; .balign 4; 0: mv %0,ra" \ + asm("jal %0,0f; .string \"" string "\"; .balign 4; 0:" \ /*out*/ : "=r"(str) \ /* in*/ : \ /*und*/ : ); \