Chromium Code Reviews| Index: src/tools/tls_edit/tls_edit.c |
| diff --git a/src/tools/tls_edit/tls_edit.c b/src/tools/tls_edit/tls_edit.c |
| index 3df73aa8918a05aeb65529dcd15a549310c76358..1791bf766d57055c83bf8f41ebbdefd35a43657c 100644 |
| --- a/src/tools/tls_edit/tls_edit.c |
| +++ b/src/tools/tls_edit/tls_edit.c |
| @@ -40,6 +40,23 @@ static void ReportError(const void *insn, const char *message) { |
| ++g_errors; |
| } |
| +static void EditMipsCode(void *code, size_t code_length) { |
|
Mark Seaborn
2016/01/11 22:19:28
Nit: can you order this after EditArmCode()?
petarj
2016/01/11 23:21:38
Done.
|
| + Elf32_Word *const words = code; |
| + Elf32_Word *const end = (void *) ((uint8_t *) code + code_length); |
| + Elf32_Word *insn; |
| + |
| + for (insn = words; insn < end; ++insn) { |
| + if ((*insn & 0xFFE0FFFF) == 0x8f000000) { |
| + /* |
| + * This is 'lw $REG, 0($t8)'. |
| + * Turn it into 'lw $REG, 4($t8)'. |
| + */ |
| + *insn |= 4; |
| + ++g_changes; |
| + } |
| + } |
| +} |
| + |
| static void EditArmCode(void *code, size_t code_length) { |
| Elf32_Word *const words = code; |
| Elf32_Word *const end = (void *) ((uint8_t *) code + code_length); |
| @@ -189,10 +206,7 @@ static Bool EditTLSCode(const char *infile, uint32_t code_addr, |
| } |
| return TRUE; |
| case EM_MIPS: |
| - if (g_verbose) { |
| - printf("%s: MIPS ELF detected, no instructions changed\n", |
| - infile); |
| - } |
| + EditMipsCode(g_code_start, code_length); |
| return TRUE; |
| default: |
| fprintf(stderr, "%s: Unsupported e_machine %d\n", |