Comments (10)
Cool, can you have a fix for this issue?
from keystone.
I don't know much about ARM, this document seems to be saying that valid local llabel values are in the range 0-99. Can we get someone to confirm?
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/Caccjfff.html
from keystone.
The code in AsmParser.cpp is generic for all assembly formats. The tombstone values (special markers) in DenseMap are defined as ~0 and ~0 - 1 which I think will be different values depending if keystone is compiled as 32 or 64-bit.
I think the easiest way to fix this issue would be to set an arbitrary maximum value, say 100,000, for the local label. That should be plenty enough, ARM supports up to 99 for example. Thoughts?
from keystone.
No we should not limit the number of labels.
from keystone.
I'm not suggesting to limit the number of labels, I'm suggesting to limit the value of local labels. They work as an offset in the assembly code, see the following example.
http://stackoverflow.com/questions/32341112/arm-assembly-local-labels
from keystone.
it seems LLVM does not have any standard here, so yes lets set 99 as the limit for the label value. can you come up with a patch?
thanks.
from keystone.
Here is the pull request.
from keystone.
i just pushed a commit to fix this, can you confirm?
from keystone.
Unfortunately this breaks numeric local label:
When assembling with a previous build
~/g/k/build3 (master) $ kstool arm "1:blt 1b"
1:blt 1b = [ fe ff ff ba ]
When assembling with the current build
~/g/k/build3 (master) $ kstool arm "1:blt 1b"
ERROR: failed on ks_asm() with count = 0, error = 'Invalid label (KS_ERR_ASM_LABEL_INVALID)' (code = 160)
The problem is with the condition if (LocalLabelVal >= Instances.size()
. Instances.size() returns the number of elements currently in the DenseMap, MCContext::NextInstance() and MCContext::GetInstance() are used to add new entries in the map (see the comments in MCContext.h). The out-of-bounds access Instances[LocalLabelVal] is handled via operator overloading. If the condition is changed to if (LocalLabelVal >= 100
for example the example works as expected.
from keystone.
ok, let me make another fix. can you send a PR for this new testcase so we will not break that in the future?
from keystone.
Related Issues (20)
- How to use as a cmake subdirectory
- 80386 call in 8086 mode
- Need support LongArch
- Can't install python bindings. /llvm/lib64/libkeystone.so not found
- Unmaintained? HOT 3
- support hex to asm ? HOT 1
- Keystone Not Assembling Powerpc HOT 1
- Keystone automatically converting immediates for relative instructions as if they were absolute? HOT 1
- MIPS- Branch absolute target restricted to 16 bits
- under ATT style, it treats decimal numbers as hexadecimal numbers. that is very painful.
- under intel style, Invalid operand (KS_ERR_ASM_INVALIDOPERAND) when same Label is accessed second time.
- that is a problem, there is hard coding to force Radix to 16 when calling ks_option. and there is not export api to set the radix
- Inline comments inside assembly code string | python HOT 1
- keystone can not recognize the symbol with '@' which contained by __stdcall or msvcp functions
- keystone is bad supporting X86 when resolving PCRel. HOT 1
- `leal (%eax,%eax), %edx` invalid operand. failure parsing operand ` (%eax,%eax)`, bad supporting to index addressing HOT 4
- Incorrect Assembly
- Absolute indirect jump
- Is there any support for export label offset or variables?
- not expected behavior when using sym resolver
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from keystone.