Skip to content
Snippets Groups Projects
Commit d73aa535 authored by Mark Freeman's avatar Mark Freeman Committed by Gopher Robot
Browse files

cmd/compile/internal/noder: begin documenting meta section

Meta is the most fundamental section. To flesh this out, we discuss references. Primitives are briefly mentioned by pointing to pkgbits,
where they will be defined using a similar grammar.

Change-Id: I7abd899f38fad4cc5caf87ebfc7aa1b1985b17d4
Reviewed-on: https://go-review.googlesource.com/c/go/+/671176


Auto-Submit: Mark Freeman <mark@golang.org>
TryBot-Bypass: Mark Freeman <mark@golang.org>
Reviewed-by: default avatarRobert Griesemer <gri@google.com>
parent 49d6777d
No related branches found
No related tags found
No related merge requests found
...@@ -16,22 +16,85 @@ sectionEnds = [10]uint32 . // defines section boundaries ...@@ -16,22 +16,85 @@ sectionEnds = [10]uint32 . // defines section boundaries
elementEnds = []uint32 . // defines element boundaries elementEnds = []uint32 . // defines element boundaries
fingerprint = [8]byte . // sha256 fingerprint fingerprint = [8]byte . // sha256 fingerprint
The payload has a structure as well. It is a series of sections, which The payload is a series of sections. Each section has a kind which determines
contain elements of the same type. Go constructs are mapped onto its index in the series.
(potentially multiple) elements. It is represented as below.
SectionKind = Uint64 .
TODO(markfreeman): Update when we rename RelocFoo to SectionFoo. TODO(markfreeman): Update when we rename RelocFoo to SectionFoo.
Payload = RelocString Payload = RelocString // TODO(markfreeman) Define.
RelocMeta RelocMeta
RelocPosBase RelocPosBase // TODO(markfreeman) Define.
RelocPkg RelocPkg // TODO(markfreeman) Define.
RelocName RelocName // TODO(markfreeman) Define.
RelocType RelocType // TODO(markfreeman) Define.
RelocObj RelocObj // TODO(markfreeman) Define.
RelocObjExt RelocObjExt // TODO(markfreeman) Define.
RelocObjDict RelocObjDict // TODO(markfreeman) Define.
RelocBody RelocBody // TODO(markfreeman) Define.
. .
# Sections
A section is a series of elements of a type determined by the section's kind.
Go constructs are mapped onto (potentially multiple) elements. Elements are
accessed using an index relative to the start of the section.
// TODO(markfreeman): Rename to SectionIndex.
RelIndex = Uint64 .
## Meta Section
The meta section provides fundamental information for a package. It contains
exactly two elements — a public root and a private root.
RelocMeta = PublicRoot
PrivateRoot // TODO(markfreeman): Define.
.
The public root element identifies the package and provides references for all
exported objects it contains.
PublicRoot = Relocs
[ SyncPublic ] // TODO(markfreeman): Define.
PackageRef // TODO(markfreeman): Define.
[ HasInit ]
ObjectRefCount // TODO(markfreeman): Define.
{ ObjectRef } // TODO(markfreeman): Define.
.
HasInit = Bool . // Whether the package uses any initialization
// functions.
# References
A reference table precedes every element. Each entry in the table contains a
section / index pair denoting the location of the referenced element.
// TODO(markfreeman): Rename to RefTable.
Relocs = [ SyncRelocs ] // TODO(markfreeman): Define.
RelocCount
{ Reloc }
.
// TODO(markfreeman): Rename to RefTableEntryCount.
RelocCount = Uint64 .
// TODO(markfreeman): Rename to RefTableEntry.
Reloc = [ SyncReloc ] // TODO(markfreeman): Define.
SectionKind
RelIndex
.
Elements encode references to other elements as an index in the reference
table — not the location of the referenced element directly.
// TODO(markfreeman): Rename to RefUse.
UseReloc = [ SyncUseReloc ] // TODO(markfreeman): Define.
RelIndex
.
# Primitives
Primitive encoding is handled separately by the pkgbits package. Check there
for definitions of the below productions.
* Bool
* Int64
* Uint64
* String
*/ */
package noder package noder
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment