Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compile error: error: left shift of negative value #6

Closed
riktw opened this issue Dec 1, 2016 · 4 comments
Closed

Compile error: error: left shift of negative value #6

riktw opened this issue Dec 1, 2016 · 4 comments

Comments

@riktw
Copy link

riktw commented Dec 1, 2016

Hello,

I got the following error when compiling the openocd tools:

In file included from /home/rik/Documents/freedom-e-sdk/openocd/src/target/riscv/riscv.c:11:0: /home/rik/Documents/freedom-e-sdk/openocd/src/target/riscv/riscv.c: In function ‘riscv_examine’: /home/rik/Documents/freedom-e-sdk/openocd/src/target/riscv/riscv.c:24:69: error: left shift of negative value [-Werror=shift-negative-value] #define get_field(reg, mask) (((reg) & (mask)) / ((mask) & ~((mask) << (1)))) ^ /home/rik/Documents/freedom-e-sdk/openocd/src/helper/log.h:108:5: note: in definition of macro ‘LOG_DEBUG’ expr); \ ^~~~ /home/rik/Documents/freedom-e-sdk/openocd/src/target/riscv/riscv.c:1727:31: note: in expansion of macro ‘get_field’ LOG_DEBUG(" abussize=0x%x", get_field(dminfo, DMINFO_ABUSSIZE));

I had a look and found out it is being caused by the following line:
LOG_DEBUG(" abussize=0x%x", get_field(dminfo, DMINFO_ABUSSIZE));
More specific:
#define DMINFO_ABUSSIZE (0x7f<<25)
If I comment the LOG_DEBUG line it compiles fine.

@timsifive
Copy link
Collaborator

Thanks for digging a little. Does this patch fix it:

diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index d4af3de..4ce732b 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -132,7 +132,7 @@ typedef enum slot {
 #define DMCONTROL_FULLRESET            1
 
 #define DMINFO                                 0x11
-#define DMINFO_ABUSSIZE                        (0x7f<<25)
+#define DMINFO_ABUSSIZE                        (0x7fU<<25)
 #define DMINFO_SERIALCOUNT             (0xf<<21)
 #define DMINFO_ACCESS128               (1<<20)
 #define DMINFO_ACCESS64                        (1<<19)

@timsifive
Copy link
Collaborator

This is also sifive/freedom-e-sdk#10

timsifive added a commit that referenced this issue Dec 2, 2016
Change-Id: If890a6d62fdd55befb9057f83726f60721ac8078
@timsifive
Copy link
Collaborator

Please close this issue if it works for you now.

@riktw
Copy link
Author

riktw commented Dec 3, 2016

Thanks, that indeed fixed the issue :)

@riktw riktw closed this as completed Dec 3, 2016
timsifive pushed a commit that referenced this issue Apr 9, 2018
…oo far

Without this, we have some types promoted to `int` when they need to be
`unsigned int`.

Here's some ubsan output hitting this:

Unfortunately, what happens is that things get promoted to `int`, but
need to be `unsigned int`. Here's the ubsan output:

src/helper/types.h:126:65: runtime error: left shift of 255 by 24 places cannot be represented in type 'int'
    #0 0x55978a612060 in le_to_h_u32 src/helper/types.h:126
    #1 0x55978a61ff9e in stlink_usb_read_reg src/jtag/drivers/stlink_usb.c:1539
    #2 0x55978a8cfd45 in adapter_load_core_reg_u32 src/target/hla_target.c:67
    #3 0x55978a9f48e3 in armv7m_read_core_reg src/target/armv7m.c:236
    #4 0x55978a8d24fc in adapter_load_context src/target/hla_target.c:372
    #5 0x55978a8d261b in adapter_debug_entry src/target/hla_target.c:396
    #6 0x55978a8d3123 in adapter_poll src/target/hla_target.c:457
    #7 0x55978a528357 in target_poll src/target/target.c:535
    #8 0x55978a539fd4 in target_wait_state src/target/target.c:2914
    #9 0x55978a556e20 in jim_target_wait_state src/target/target.c:5256
    #10 0x55978a5cca62 in command_unknown src/helper/command.c:1030
    #11 0x55978aaed894 in JimInvokeCommand /home/cody/d/openocd-code/jimtcl/jim.c:10364

Change-Id: I24f6abfd26b6980100657397d69c84f2b80a005a
Signed-off-by: Cody P Schafer <[email protected]>
Reviewed-on: http://openocd.zylin.com/4455
Reviewed-by: Tomas Vanek <[email protected]>
Tested-by: jenkins
Reviewed-by: Christopher Head <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants