linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] objtool fix bytes check
@ 2016-12-05 12:41 Jiri Slaby
  2016-12-05 12:41 ` [PATCH] objtool: fix build Jiri Slaby
  0 siblings, 1 reply; 4+ messages in thread
From: Jiri Slaby @ 2016-12-05 12:41 UTC (permalink / raw)
  To: jpoimboe; +Cc: linux-kernel, Jiri Slaby

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
Feel free to stash both of them into your objtool-dwarf branch. They
are on the top of the upstream fix I have sent earlier today.

 tools/objtool/arch/x86/decode.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c
index 98eac1bb106f..ca4ede5ddd8c 100644
--- a/tools/objtool/arch/x86/decode.c
+++ b/tools/objtool/arch/x86/decode.c
@@ -206,7 +206,7 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
 		break;
 
 	case 0x89:
-		if (insn.rex_prefix.nbytes && insn.modrm.bytes &&
+		if (insn.rex_prefix.nbytes && insn.modrm.nbytes &&
 		    insn.rex_prefix.bytes[0] == 0x48 &&
 		    insn.modrm.bytes[0] == 0xe5) {
 
@@ -277,7 +277,7 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
 		break;
 
 	case 0x8d:
-		if (insn.rex_prefix.nbytes && insn.modrm.bytes &&
+		if (insn.rex_prefix.nbytes && insn.modrm.nbytes &&
 		    insn.rex_prefix.bytes[0] == 0x48 &&
 		    insn.modrm.bytes[0] == 0x65) {
 
@@ -291,8 +291,8 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
 			break;
 		}
 
-		if (insn.rex_prefix.bytes && insn.modrm.bytes &&
-		    insn.sib.bytes && insn.rex_prefix.bytes[0] == 0x4c &&
+		if (insn.rex_prefix.nbytes && insn.modrm.nbytes &&
+		    insn.sib.nbytes && insn.rex_prefix.bytes[0] == 0x4c &&
 		    insn.modrm.bytes[0] == 0x54 && insn.sib.bytes[0] == 0x24 &&
 		    insn.displacement.value == 8) {
 
@@ -312,7 +312,7 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
 			break;
 		}
 
-		if (drap && insn.rex_prefix.bytes && insn.modrm.bytes &&
+		if (drap && insn.rex_prefix.nbytes && insn.modrm.nbytes &&
 		    insn.rex_prefix.bytes[0] == 0x49 &&
 		    insn.modrm.bytes[0] == 0x62 &&
 		    insn.displacement.value == -8) {
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH] objtool: fix build
  2016-12-05 12:41 [PATCH] objtool fix bytes check Jiri Slaby
@ 2016-12-05 12:41 ` Jiri Slaby
  2016-12-05 20:40   ` Josh Poimboeuf
  0 siblings, 1 reply; 4+ messages in thread
From: Jiri Slaby @ 2016-12-05 12:41 UTC (permalink / raw)
  To: jpoimboe; +Cc: linux-kernel, Jiri Slaby

0x8d opcode was handled twice. Fixed.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 tools/objtool/arch/x86/decode.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c
index ca4ede5ddd8c..6011ccbf9384 100644
--- a/tools/objtool/arch/x86/decode.c
+++ b/tools/objtool/arch/x86/decode.c
@@ -291,6 +291,20 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
 			break;
 		}
 
+		if (insn.rex_prefix.nbytes &&
+		    insn.rex_prefix.bytes[0] == 0x48 &&
+		    insn.modrm.nbytes && insn.modrm.bytes[0] == 0x2c &&
+		    insn.sib.nbytes && insn.sib.bytes[0] == 0x24) {
+			/* lea %(rsp), %rbp */
+			*type = INSN_STACK;
+			op->dest.type = OP_DEST_REG;
+			op->dest.reg = CFI_BP;
+			op->src.type = OP_SRC_ADD;
+			op->src.reg = CFI_SP;
+			op->src.offset = 0;
+			break;
+		}
+
 		if (insn.rex_prefix.nbytes && insn.modrm.nbytes &&
 		    insn.sib.nbytes && insn.rex_prefix.bytes[0] == 0x4c &&
 		    insn.modrm.bytes[0] == 0x54 && insn.sib.bytes[0] == 0x24 &&
@@ -342,15 +356,6 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
 		op->src.type = OP_SRC_POP;
 		break;
 
-	case 0x8d:
-		if (insn.rex_prefix.nbytes &&
-		    insn.rex_prefix.bytes[0] == 0x48 &&
-		    insn.modrm.nbytes && insn.modrm.bytes[0] == 0x2c &&
-		    insn.sib.nbytes && insn.sib.bytes[0] == 0x24)
-			/* lea %(rsp), %rbp */
-			*type = INSN_FP_SETUP;
-		break;
-
 	case 0x90:
 		*type = INSN_NOP;
 		break;
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] objtool: fix build
  2016-12-05 12:41 ` [PATCH] objtool: fix build Jiri Slaby
@ 2016-12-05 20:40   ` Josh Poimboeuf
  2016-12-14 10:48     ` Jiri Slaby
  0 siblings, 1 reply; 4+ messages in thread
From: Josh Poimboeuf @ 2016-12-05 20:40 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: linux-kernel

On Mon, Dec 05, 2016 at 01:41:37PM +0100, Jiri Slaby wrote:
> 0x8d opcode was handled twice. Fixed.
> 
> Signed-off-by: Jiri Slaby <jslaby@suse.cz>

I applied the other patch to the objtool-dwarf branch, but this one
doesn't apply (the branch already has the changes this patch is trying
to make).

> ---
>  tools/objtool/arch/x86/decode.c | 23 ++++++++++++++---------
>  1 file changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c
> index ca4ede5ddd8c..6011ccbf9384 100644
> --- a/tools/objtool/arch/x86/decode.c
> +++ b/tools/objtool/arch/x86/decode.c
> @@ -291,6 +291,20 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
>  			break;
>  		}
>  
> +		if (insn.rex_prefix.nbytes &&
> +		    insn.rex_prefix.bytes[0] == 0x48 &&
> +		    insn.modrm.nbytes && insn.modrm.bytes[0] == 0x2c &&
> +		    insn.sib.nbytes && insn.sib.bytes[0] == 0x24) {
> +			/* lea %(rsp), %rbp */
> +			*type = INSN_STACK;
> +			op->dest.type = OP_DEST_REG;
> +			op->dest.reg = CFI_BP;
> +			op->src.type = OP_SRC_ADD;
> +			op->src.reg = CFI_SP;
> +			op->src.offset = 0;
> +			break;
> +		}
> +
>  		if (insn.rex_prefix.nbytes && insn.modrm.nbytes &&
>  		    insn.sib.nbytes && insn.rex_prefix.bytes[0] == 0x4c &&
>  		    insn.modrm.bytes[0] == 0x54 && insn.sib.bytes[0] == 0x24 &&
> @@ -342,15 +356,6 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
>  		op->src.type = OP_SRC_POP;
>  		break;
>  
> -	case 0x8d:
> -		if (insn.rex_prefix.nbytes &&
> -		    insn.rex_prefix.bytes[0] == 0x48 &&
> -		    insn.modrm.nbytes && insn.modrm.bytes[0] == 0x2c &&
> -		    insn.sib.nbytes && insn.sib.bytes[0] == 0x24)
> -			/* lea %(rsp), %rbp */
> -			*type = INSN_FP_SETUP;
> -		break;
> -
>  	case 0x90:
>  		*type = INSN_NOP;
>  		break;
> -- 
> 2.11.0
> 

-- 
Josh

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] objtool: fix build
  2016-12-05 20:40   ` Josh Poimboeuf
@ 2016-12-14 10:48     ` Jiri Slaby
  0 siblings, 0 replies; 4+ messages in thread
From: Jiri Slaby @ 2016-12-14 10:48 UTC (permalink / raw)
  To: Josh Poimboeuf; +Cc: linux-kernel

On 12/05/2016, 09:40 PM, Josh Poimboeuf wrote:
> On Mon, Dec 05, 2016 at 01:41:37PM +0100, Jiri Slaby wrote:
>> 0x8d opcode was handled twice. Fixed.
>>
>> Signed-off-by: Jiri Slaby <jslaby@suse.cz>
> 
> I applied the other patch to the objtool-dwarf branch, but this one
> doesn't apply (the branch already has the changes this patch is trying
> to make).

You must have the fix from upstream first to have this applied:
commit 69042bf2001b44e81cd86ab11a4637b9d9a14c5a
Author: Jiri Slaby <jslaby@suse.cz>
Date:   Mon Dec 5 11:55:51 2016 +0100

    objtool: Fix bytes check of lea's rex_prefix

Thanks.

>> ---
>>  tools/objtool/arch/x86/decode.c | 23 ++++++++++++++---------
>>  1 file changed, 14 insertions(+), 9 deletions(-)
>>
>> diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c
>> index ca4ede5ddd8c..6011ccbf9384 100644
>> --- a/tools/objtool/arch/x86/decode.c
>> +++ b/tools/objtool/arch/x86/decode.c
>> @@ -291,6 +291,20 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
>>  			break;
>>  		}
>>  
>> +		if (insn.rex_prefix.nbytes &&
>> +		    insn.rex_prefix.bytes[0] == 0x48 &&
>> +		    insn.modrm.nbytes && insn.modrm.bytes[0] == 0x2c &&
>> +		    insn.sib.nbytes && insn.sib.bytes[0] == 0x24) {
>> +			/* lea %(rsp), %rbp */
>> +			*type = INSN_STACK;
>> +			op->dest.type = OP_DEST_REG;
>> +			op->dest.reg = CFI_BP;
>> +			op->src.type = OP_SRC_ADD;
>> +			op->src.reg = CFI_SP;
>> +			op->src.offset = 0;
>> +			break;
>> +		}
>> +
>>  		if (insn.rex_prefix.nbytes && insn.modrm.nbytes &&
>>  		    insn.sib.nbytes && insn.rex_prefix.bytes[0] == 0x4c &&
>>  		    insn.modrm.bytes[0] == 0x54 && insn.sib.bytes[0] == 0x24 &&
>> @@ -342,15 +356,6 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
>>  		op->src.type = OP_SRC_POP;
>>  		break;
>>  
>> -	case 0x8d:
>> -		if (insn.rex_prefix.nbytes &&
>> -		    insn.rex_prefix.bytes[0] == 0x48 &&
>> -		    insn.modrm.nbytes && insn.modrm.bytes[0] == 0x2c &&
>> -		    insn.sib.nbytes && insn.sib.bytes[0] == 0x24)
>> -			/* lea %(rsp), %rbp */
>> -			*type = INSN_FP_SETUP;
>> -		break;
>> -
>>  	case 0x90:
>>  		*type = INSN_NOP;
>>  		break;
>> -- 
>> 2.11.0
>>
> 


-- 
js
suse labs

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-12-14 10:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-05 12:41 [PATCH] objtool fix bytes check Jiri Slaby
2016-12-05 12:41 ` [PATCH] objtool: fix build Jiri Slaby
2016-12-05 20:40   ` Josh Poimboeuf
2016-12-14 10:48     ` Jiri Slaby

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).