2010-11-14 02:07:16

by Hai Shan

[permalink] [raw]
Subject: Corrected data type mismatch in kgdb Powerpc


Corrected data type mismatch in kgdb Powerpc


2010-11-14 02:07:22

by Hai Shan

[permalink] [raw]
Subject: [PATCH] Corrected data type mismatch

Corrected data type mismatch

Signed-off-by: Hai Shan <[email protected]>
---
arch/powerpc/kernel/kgdb.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/kgdb.c b/arch/powerpc/kernel/kgdb.c
index 7a9db64..c5ce65f 100644
--- a/arch/powerpc/kernel/kgdb.c
+++ b/arch/powerpc/kernel/kgdb.c
@@ -337,7 +337,7 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
/* FP registers 32 -> 63 */
#if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
if (current)
- memcpy(mem, current->thread.evr[regno-32],
+ memcpy(mem, (void *)current->thread.evr[regno-32],
dbg_reg_def[regno].size);
#else
/* fp registers not used by kernel, leave zero */
@@ -362,7 +362,7 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs)
if (regno >= 32 && regno < 64) {
/* FP registers 32 -> 63 */
#if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
- memcpy(current->thread.evr[regno-32], mem,
+ memcpy((void *)current->thread.evr[regno-32], mem,
dbg_reg_def[regno].size);
#else
/* fp registers not used by kernel, leave zero */
--
1.7.0.4

2010-11-16 10:17:42

by Milton Miller

[permalink] [raw]
Subject: Re: Corrected data type mismatch

[added cc's based on from ff10b88b5a05c8f1646dd15fb9f6093c1384ff6d,
which added the patched line ]

https://patchwork.kernel.org/patch/323022/

On Sun, 14 Nov 2010 around 02:06:59 -0000, Hai Shan wrote:
>
> Corrected data type mismatch
>
This merely hides the type mismatch by force casting it.

Looking at the context I believe the intent is to copy the the value to
or from the register content slot, not take the previous value of the
register and use that as an address to copy to or from.

milton
> Signed-off-by: Hai Shan <[email protected]>
>
> ---
> arch/powerpc/kernel/kgdb.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/powerpc/kernel/kgdb.c b/arch/powerpc/kernel/kgdb.c
> index 7a9db64..c5ce65f 100644
> --- a/arch/powerpc/kernel/kgdb.c
> +++ b/arch/powerpc/kernel/kgdb.c
> @@ -337,7 +337,7 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
> /* FP registers 32 -> 63 */
> #if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
> if (current)
> - memcpy(mem, current->thread.evr[regno-32],
> + memcpy(mem, (void *)current->thread.evr[regno-32],
> dbg_reg_def[regno].size);
> #else
> /* fp registers not used by kernel, leave zero */
> @@ -362,7 +362,7 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs)
> if (regno >= 32 && regno < 64) {
> /* FP registers 32 -> 63 */
> #if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
> - memcpy(current->thread.evr[regno-32], mem,
> + memcpy((void *)current->thread.evr[regno-32], mem,
> dbg_reg_def[regno].size);
> #else
> /* fp registers not used by kernel, leave zero */

2010-11-16 12:06:53

by DDD

[permalink] [raw]
Subject: Re: Corrected data type mismatch

Milton Miller wrote:
> [added cc's based on from ff10b88b5a05c8f1646dd15fb9f6093c1384ff6d,
> which added the patched line ]
>
> https://patchwork.kernel.org/patch/323022/
>
> On Sun, 14 Nov 2010 around 02:06:59 -0000, Hai Shan wrote:
>> Corrected data type mismatch
>>
> This merely hides the type mismatch by force casting it.
>
> Looking at the context I believe the intent is to copy the the value to
> or from the register content slot, not take the previous value of the
> register and use that as an address to copy to or from.


OOPS! It is wrong here, The right one should be as following:

- memcpy(mem, current->thread.evr[regno-32],
+ memcpy(mem, (void*)&current->thread.evr[regno-32],
dbg_reg_def[regno].size);

Thanks milton & Shan.Hai, I will send out the fix to Jason ASAP.

Dongdong


>
> milton
>> Signed-off-by: Hai Shan <[email protected]>
>>
>> ---
>> arch/powerpc/kernel/kgdb.c | 4 ++--
>> 1 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/powerpc/kernel/kgdb.c b/arch/powerpc/kernel/kgdb.c
>> index 7a9db64..c5ce65f 100644
>> --- a/arch/powerpc/kernel/kgdb.c
>> +++ b/arch/powerpc/kernel/kgdb.c
>> @@ -337,7 +337,7 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
>> /* FP registers 32 -> 63 */
>> #if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
>> if (current)
>> - memcpy(mem, current->thread.evr[regno-32],
>> + memcpy(mem, (void *)current->thread.evr[regno-32],
>> dbg_reg_def[regno].size);
>> #else
>> /* fp registers not used by kernel, leave zero */
>> @@ -362,7 +362,7 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs)
>> if (regno >= 32 && regno < 64) {
>> /* FP registers 32 -> 63 */
>> #if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
>> - memcpy(current->thread.evr[regno-32], mem,
>> + memcpy((void *)current->thread.evr[regno-32], mem,
>> dbg_reg_def[regno].size);
>> #else
>> /* fp registers not used by kernel, leave zero */
>

2010-11-16 13:16:50

by Hai Shan

[permalink] [raw]
Subject: Re: Corrected data type mismatch


On Nov 16, 2010, at 8:07 PM, DDD wrote:

> Milton Miller wrote:
>> [added cc's based on from ff10b88b5a05c8f1646dd15fb9f6093c1384ff6d,
>> which added the patched line ]
>> https://patchwork.kernel.org/patch/323022/
>> On Sun, 14 Nov 2010 around 02:06:59 -0000, Hai Shan wrote:
>>> Corrected data type mismatch
>>>
>> This merely hides the type mismatch by force casting it.
>> Looking at the context I believe the intent is to copy the the value to
>> or from the register content slot, not take the previous value of the
>> register and use that as an address to copy to or from.
>
>
> OOPS! It is wrong here, The right one should be as following:
>
> - memcpy(mem, current->thread.evr[regno-32],
> + memcpy(mem, (void*)&current->thread.evr[regno-32], dbg_reg_def[regno].size);
>
> Thanks milton & Shan.Hai, I will send out the fix to Jason ASAP.
>


Sorry for my crude fix :)


> Dongdong
>
>
>> milton
>>> Signed-off-by: Hai Shan <[email protected]>
>>>
>>> ---
>>> arch/powerpc/kernel/kgdb.c | 4 ++--
>>> 1 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/arch/powerpc/kernel/kgdb.c b/arch/powerpc/kernel/kgdb.c
>>> index 7a9db64..c5ce65f 100644
>>> --- a/arch/powerpc/kernel/kgdb.c
>>> +++ b/arch/powerpc/kernel/kgdb.c
>>> @@ -337,7 +337,7 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
>>> /* FP registers 32 -> 63 */
>>> #if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
>>> if (current)
>>> - memcpy(mem, current->thread.evr[regno-32],
>>> + memcpy(mem, (void *)current->thread.evr[regno-32],
>>> dbg_reg_def[regno].size);
>>> #else
>>> /* fp registers not used by kernel, leave zero */
>>> @@ -362,7 +362,7 @@ int dbg_set_reg(int regno, void *mem, struct pt_regs *regs)
>>> if (regno >= 32 && regno < 64) {
>>> /* FP registers 32 -> 63 */
>>> #if defined(CONFIG_FSL_BOOKE) && defined(CONFIG_SPE)
>>> - memcpy(current->thread.evr[regno-32], mem,
>>> + memcpy((void *)current->thread.evr[regno-32], mem,
>>> dbg_reg_def[regno].size);
>>> #else
>>> /* fp registers not used by kernel, leave zero */
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/