CensoredUsername / dynasm-rs

A dynasm-like tool for rust.
https://censoredusername.github.io/dynasm-rs/language/index.html
Mozilla Public License 2.0
716 stars 52 forks source link

Label clarifications #91

Open vext01 opened 6 months ago

vext01 commented 6 months ago

Hi there!

I'm starting to use labels a bit more, and I have a few questions. I may be able to do a pull-request to improve some docs later.

local labels

Is there a way to get their addresses at runtime via the API?

global labels

Global labels can only be defined once

Is that once per address space, or once per assembler?

Global labels can only be defined once, and all references to a global label will be resolved to this label. Any valid Rust identifier can be used as a local label name.

In the second sentence should "local label name" be "global label name"?

Thanks!

vext01 commented 6 months ago

Oh, one more I just spotted:

image

Talks about name, but it's nowhere to be seen. Presumably left over from an earlier design?

CensoredUsername commented 6 months ago

Hi! Seems you caught a bit of residue from the global/local label redesign, thanks for reporting it. At one point global and local labels were handled separately, but nowadays they both are variants of StaticLabel. Seems the documentation is still a bit outdated there.

Is there a way to get their addresses at runtime via the API?

Yep. You can query LabelRegistry::resolve_static for it. First you have to construct the appropriate StaticLabel. For that you can either use StaticLabel::local (if you know which version of the label you need), StaticLabel::first (if it's the only one), or most likely LabelRegistry::place_local_reference, which gives you a reference to the last defined local label.

(local labels are essentially global labels with an extra version number added to distinguish between different uses of the same local label).

Is that once per address space, or once per assembler?

Per Assembler. These labels are purely a thing for dynasm-rs. If you want actual executable symbols you need to handle that yourself.

In the second sentence should "local label name" be "global label name"?

Or just label name. Both global and local labels reuse the same rules.

Talks about name, but it's nowhere to be seen. Presumably left over from an earlier design?

Yep. Part of the redesign I mentioned before.

vext01 commented 6 months ago

Thanks!

I'll aim to raise a PR to fix these things.