►
From YouTube: OMR Architecture Meeting 20201022
Description
Agenda:
* Port library initialization with JitBuilder and OMR compiler (#1644) [ @0xdaryl ]
A
Welcome
everyone
to
this
week's
omar
architecture.
Meeting
this
week
we
have
one
topic
to
discuss.
I
apologize
for
the
sort
of
rush
nature
of
it.
I
only
had
a
short
amount
of
time
to
prepare
for
it,
but
I'm
hoping
that
we
can
make
some
some
progress
on
it.
It
is
a
bit
of
an
older
issue
that
that
we
wanted
to
make
some
some
headway
on
for
for
quite
some
time,
and
that
is
using
the
port
library
within
the
compiler
or
the
jit
builder
components.
A
A
couple
of
more
than
a
couple
of
years
ago,
we
made
the
first
step
on
introducing
the
port
library
as
part
of
the
build
process,
so
that
the
the
port
library
and
the
compiler
are
coupled
together
that
way,
but
we
never
went
the
next
step
to
actually
initialize
the
port
library
and
start
to
use
it
within
the
within
the
compiler.
A
A
We
had
a
talk
at
the
omr
architecture
meeting
about
two
and
a
half
years
ago
in
early
2018
and
at
that
time,
when
we
I'm
going
to
try
to
summarize
the
discussion
from
that
time.
But
what
basically
happened
there
was
we
wanted
to
talk
about
a
similar
topic,
but
it
sort
of
evolved
into
a
broader
architecture,
discussion
around
omar
component
initialization
and
how
it
should
be
done,
and
there
were
many
aspects
of
that
kind
of
of
that
discussion.
A
I
think
I
mean
I
think
there
were
a
lot
of
good
points
that
were
that
were
brought
out
in
there,
but
I
don't
think
that
there
were
a
lot
of
concrete
actions
that
that
came
from
that.
But
some
of
the
some
of
the
discussions
that
happened
were
around
what
are
the
actual
components
within
omr
that
we
that
we
really
care
about
and
and
that
should
be
initialized.
A
What
are
the
dependencies
between
the
various
components?
It's
not
really
clear.
So
there
was
some
desire
to
have
more
documentation
on
how
the
different
components
are
dependent
on
one
another
and
what
the
initialization
path
would
would
look
like,
and
then
there
was
some
discussion
around
whether
or
not
these
independent
components
are
truly
independent
in
the
sense
that,
even
though
you
may
not
be
using
a
particular
component,
you
still
have
to
build
it
into
your
product
that
that,
like
you,
you
can't
just
build
it
out
it.
A
A
We
also
had
a
a
bit
of
a
discussion
around
the
various
the
role
of
various
data
structures
and
what
they
mean.
If
you
look
outside
of
the
compiler
and
jit
builder,
you'll
see
references
to
the
omr
vm
structure,
the
omrvm
thread
structure,
there's
an
omr,
runtime
structure,
language
thread,
language
vm.
A
All
these
things
need
to
be
defined
in
some
way
and
I
guess
their
their.
Their
use
needs
to
be
justified
and
like
we
need
to
understand
what
they,
what
they
actually
mean
and
what
they're,
what
they're
truly
for?
A
There
was
some
concerns
that
were
raised
on
specifically
about
the
port
library
and
and
using
the
port
library
within
certain
components,
how
the
how,
if
multiple
components,
need
to
use
the
same
component
like
the
port
library?
How
does
that
actually
get
initialized?
What
is
you
don't
want
to
be
initializing,
your
own
port
library,
if
one
has
already
been
created
and
initialized,
so
the
discussion
went
on
about
how
do
you
discover
that
a
port
library
is
available
and
then
there
are
ones
around
that?
A
But
the
one
thing
that
we
eventually
all
seem
to
agree
on
was
if
we
were
going
to
redo
the
initialization
approach
for
all
these
different
components.
What
would
it
look
like,
and
it's
essentially,
we
agreed
that
initialization
should
probably
follow
a
three-step
approach.
The
first
is
to
do
a
process-wide
initialization,
which
would
include
things
like
the
port
library
and
the
thread
library.
A
The
next
phase
in
that
would
be
a
vm
wide
initialization,
which
includes
things
like
the
gc
and
perhaps
some
parts
of
the
compiler,
and
then
there
would
be
a
thread
specific
initialization
or
a
vm
thread
specific
set
of
initialization.
That
would
take
care
of
the
example
that
was
given
were
some
sub-components
of
the
garbage
collector
that
needed
that
kind
of
granularity.
A
So
there
was
agreement
that
that
was
the
way
that
we
should
go
at
that
time.
Robert
young
was
working
on
some
gc
object,
model
work
and
a
gc
builder
component,
and
he
had
already
done
some
refactoring
of
the
gc
in
his
own
branch
to
to
test
out
that
kind
of
an
initialization
scheme,
and
he
found
that
it
that
he
was
able
to
get
that
to
work.
So
there
was
definitely
some
some
positivity
there
going
forward.
A
A
We
didn't
really
move
that
much
closer
to
solving
the
original
problem
that
we
were
trying
to
solve,
which
was
how
do
we
simply
initialize
initialize
the
port
library
within
within
the
compiler,
and
I'd
like
to
come
back
to
that
particular
topic
today
to
hopefully
come
up
with
a
a
short
term
solution
to
to
solve
that,
without
necessarily
thinking
about
the
much
bigger
picture
of
how
the
entire
set
of
components
need
to
be
initialized
and
orchestrated,
because
I
think
that
that
will
need
a
lot.
A
The
thinking
on
that
has
to
go
a
lot
deeper.
I
think-
and
it's
it's
more
it.
It
requires
more
effort
than
I
think
that
we're
prepared
to
to
put
into
that
at
this
point.
So
I'd
like
to
talk
just
about
jit
builder
and
compiler,
using
the
I
mentioned
that
we've
already
got
a
build
dependence
on
the
port
library,
which
is
good.
A
The
proposal
that
I'll
just
throw
out
there
is
that
we
we
do
that
within
the
jit
builder
or
the
android
compiler
is
responsible
for
creating
their
own
at
creating
and
initializing
their
own
thread,
library
and
their
own
port
library,
and
the
reason
you
need
both
is
what
we've
been.
What
what
we?
A
The
understanding
is
that
the
the
port
library
and
thread
library
need
to
come
as
a
pair,
so
we
have
to
initialize
both
so
create
them,
initialize
them
and
then
hang
a
pointer
to
the
port
library
off
of
the
compiler
end
structure,
openj9
biggest
consumer
of
omr
already
does
this:
they
have
a
port,
a
pointer
to
the
port
library
living
on
the
their
specialization
of
the
compiler
and
structure.
So
in
the
open,
j9
code
itself,
the
compiler
code,
they
do
use
the
port
library
from
there.
A
A
So
I
think
that
in
order
to
do
that,
we
should
simply
just
harvest
the
code
that
lives
in
the
omr
initialized
vm
structure,
the
the
you
know,
20
30
lines
of
code,
that's
already
there
to
initialize
the
thread
in
the
port
library
and
simply
can
simply
reuse
that
the
challenge
is
one
of
the
challenges
is
that
there
isn't
really
any
standard
api
for
initializing,
the
compiler
or
jit
builder.
I
know
that
we
have
a
like
an
initialized
jit
builder
function.
A
There's
an
initialized
test
jet
function,
other
language
environments
that
are
consuming
omr
have
their
own
initialization
methods.
There
isn't
really
sort
of
a
standard
api
for
that,
but
the
things
that
they
have
in
there
are
somewhat
similar
in
the
sense
that
you
create
a
raw
allocator.
You
have
to
create
a
compiler
infrastructure.
You
have
to
initialize
that
compiler
and
structure,
depending
upon
the
environment
that
you're
in.
So
I
think
as
part
of
that
sort
of
series
of
steps
that
all
these
different
language
environments
take.
A
We
should
have
another
step
in
there
to
create
and
initialize
the
port
and
thread
library
fairly
early
on,
so
that
we
can
hang
it
off
of
the
compiler
end,
so
that
might
be
an
oversimplification
of
this
process,
but
that's
the
idea
that
I'll
throw
out
for.
A
B
What
are
the
you,
what
are
the
main
uses
in
omr
for
the
port
library
that
you're
seeing?
Is
it
like
cpu
feature,
detection
or
memory
allocation
or.
A
Right
now
we're
maintaining
two
there's
two
versions
of
it
right,
there's
the
the
older
way
of
doing
it
and
then
there's
the
the
version
that
move
that
was
migrated
into
the
port
library.
D
B
D
Good
question,
so
I
remember
one
of
the
issues
when
we
talked
about
this
last
time
was
that
you're
not
really
supposed
to
have
more
than
one
port
library
that
there
are
at
least
historically
there
have
been
some
problems
that
have
arisen
when
a
second
port
library
was
attempted
to
be
created,
so
it
really
is
kind
of
a
singleton
type
thing,
as
I
understand
it
anyway.
Unfortunately,
there's
nobody
there's
nobody
from
the
non-jet
team.
D
On
the
call
right
now
to
to
help
us
understand
that,
so
we
might
want
to
follow
up
with
some
people
on
this,
but
but
my
understanding
is
that,
where
there's
only
supposed
to
be
one
port
library
in
the
whole
process
or
maybe
per
vm,
so
so
somebody
has
to
create
it.
I
was
just
like.
While
daryl
was
talking,
I
was
going
to
look
at
the
the
the
walmart
startup
code.
D
I
mean
it
basically
just
has
a
static
variable,
that's
the
port
library,
and
then
you
end
up
using
passing
a
pointer
to
that
thing
around.
So
I
guess
the
question
is,
I
mean
there's
going
to
be
a
bunch
of
example,
uses
out
there
of
people
who
are
probably
leveraging
similar
code
to
what's
in
that
omr
vm
startup
online,
either
creating
their
own
port
library
or
there's
some
port
library
being
created
at
some
point.
D
And
if
it
creates
its
own,
then
you
run
into
this
potential
problem
where
others
might
have
created
it,
and
then
I
guess
jet
builder
has
the
same
issue
right.
If
you
want
to
use
jit
builder
inside
something
else,
then
you
might
have
already
allocated
your
own
port
builder,
sorry
port
library,
but
if
you
want
to
be
just
using
jit
builder
in
a
stand-alone
universe,
when
you
call
initialized
jit,
that
really
should
be
creating
the
port
library
in
this,
this
new
world
that
daryl's
describing.
A
So
we
did
talk
about
that
last
time
and
I
think
that
that's
one
of
the
solutions
that
came
up
was
actually
just
to
provide
two
apis,
one
like
an
initialization
api
for
jit
builder.
That
provides
a
port
library
and
one
that
doesn't.
And
if
you
don't
provide
one,
then
you
are
on
your
own
to
go
ahead
and
or
you
should
feel
free
to
go
ahead
and
create
one
and
initialize.
A
But
that
doesn't
necessarily
broadcast
the
fact
that
you
have
now
initialized
a
port
library
and
if
there's
another
component
that
actually
wants
to
use
it
you're
not
communicating
with
that
component
to
tell
it
that
you've
just
created
one.
So.
D
A
D
So
that
might
also
depend
on
what
parts
of
the
port
library
that
the
compiler
component
ends
up
using
right
like
if
it.
If
it
really
is
only
the
cpu
detection
stuff,
then
maybe
that's,
maybe
that's
a
facility
that
you
can
tolerate,
having
two
copies
of
the
port
library,
because
you'll
just
you'll
just
double
up
the
queries
from
you
know,
you'll
ask
the
same
query
of
different
objects
and
it
will
give
you
hopefully
the
same
result,
but
it
won't.
There
won't
be
any
like
state
like.
D
I
could
imagine
if
you're
doing
memory
acts,
actually,
I'm
not
even
sure
if
the
port
library
does
the
things
that
we're
talking
about
now
that
I
think
about
it
more
deeply.
I'm
not
sure
that
that
memory,
maybe
the
function,
calls
it
is
supposed
to
be.
There.
D
D
D
D
The
other
problem,
with
the
the
what
you
what
you
described
for
the
approach
for
jit
builder,
would
be
that
the
projects
which
have
their
own
port
library
and
use
jitbuilder
those
would
all
have
to
be
updated
since
they
would
be
in
their
own.
Like
you,
the
the
way
that,
by
default,
calling
initialize
jet
would
be
would
be
going
would
be
going
to
create
a
a
second
port
library.
I
guess.
A
So
those
would
be
the
ones
that
have
consumed
gc
in
the
past.
D
D
A
A
Probably
so
in
those
so
in
those,
so
those
are
examples
of
one
where.
D
B
A
A
I
was
thinking
we
could
lift
the
30
lines
or
so
of
code
from
omr
initialize
vm.
I
don't
think
that
omr
initialized
vm
should
actually
be
the
function
like
it's
called.
I
think
it
should
be
just
because
we
don't
need
everything.
That's
in
there
to
do
this.
It's
almost
like.
We
would
create
our
own
either.
We
provide
a
function
in
the
port
library
to
do
this
or
we
create
our
own.
Let's
say
that
lives
in
the
omr
compiler
that
is
responsible
for
initializing,
the
port
and
and
thread
library.
A
Should
it
need,
or
should
it
need
to
to
create
it?
At
least
there
will
be
it'll
all
live
in
one
function,
it
could
be
used
by
git
builder
or
the
compiler.
D
A
I
didn't
see
that
I,
I
wasn't
actually
even
sure
of
the
dependency
between
the
thread,
library
and
the
port
library,
because
I
can't
see
where
the
connection
is
being
made
between
them,
at
least
in
that,
if
you're
looking
at
omr
initialize
vm,
I
don't
see
the
code
that
actually
makes
the
there's
no
pointer
from
the
port
library
to
the
thread,
library
or
or
vice
versa.
So
I'm
not
sure
what
the
what
the
dependency
there
is.
D
A
Yeah
I
could
pick
on
somebody
right
now.
Nazim
who's
actually
done
this
in
the
past.
Did
you
do?
I
don't
know
if
you
recall
the
code
that
you
wrote
there,
but
I
know
you
have
initialized
the
port
library
within
within
jet
builder.
Did
you
have
to,
I
think
you've
had
a
relatively
smooth
experience
with
it.
It
wasn't
like
it
was.
You
had
to
do
a
lot
of
jump
through
a
lot
of
hoops
for
that.
C
Now
we
were
doing
that
quickly,
yeah,
yes,
for
the
remember
it
wasn't
that
complicated
to
just
pass
an
initialized
quote
library
into
initialize
it.
I
had
to
change
the
api
to
accept
that
and
then
that
was
fine
and
well.
I
don't
remember
much
of
the
details,
but
I
probably
might
be
able
to
get
the
code.
A
C
Okay-
and
I,
if
I
remember
correctly,
I
think
the
initialize
sport
library
api,
that
I
used
checks
if
something
is
already
initialized,
but
I
could
be
wrong.
A
I
guess
one
of
the
things
to
make
to
make
the
discussion
of
this
a
little
bit
easier
and
perhaps
easier
to
to
broaden
to
other
to
pull
in
other
people.
It
might
be
useful
to
actually
have
a
some
kind
of
a
pull
request
like
a
work
in
progress,
pull
request
just
so
that
there's
some
real
code
in
front
of
people
to
actually
visualize
and
see
what
this,
what
this
would
actually
look
like.
E
There's
a
small
chunk
of
code
in
compiler
trail
test.
The
compiler
trail
test
that
initializes,
the
port
library
and
it
looks
like
it
might
actually
be
checking.
E
E
But
the
one
thing
that
I
do
see
from
that
code
is:
it
basically
needs
the
thread
library.
You
have
to
press
the
thread
library
when
you
initialize
the
port
library.
D
Comes
in
yeah
that
makes
sense
to
me:
I've
been
grubbing
through
some
of
the
data
structures
while
you
talked-
and
there
is
some
of
the
tls
stuff
services
in
the
port
libraries
data
structures.
A
C
D
Requests,
I
guess
that
was
expressed
in
one
of
the
earlier
conversations-
was
to
not
grow
things
more
than
we
have
to.
D
A
Stuff
yeah,
I
think
they're
just
still
using
well,
I
I
think
they're
still
using
the
j9
prefix,
even
though
it
may
not
be
a
lot
of
specific.
D
A
A
Okay,
so
if
there's
no
fundamental
objection
from
anyone
on
this
call,
I
think
that
all
in
favor
of
of
this-
but
I
think
the
next
step-
is
to
really
follow
it
up
with
with
some
code
that
that
we
can
talk
to
and
talk
to
others
about,
so
that
we
can
hopefully
refine
it
into
something
that
would
would
achieve
what
we.
A
A
Okay,
so
I'll
look
into
either
doing
that
or
poking
someone
to
that
has
an
interest
in
this
into
doing
into
doing
this,
and
then
hopefully
we
can
make
some
some
headway
here.
A
No
okay,
all
right,
then
I
guess
it'll
be
a
short
call
today
and
thanks
everyone
for
attending
and
we'll
talk
to
you
again
in
a
couple
weeks.